Ouster激光雷达获取点云线数ring(通道)信息 您所在的位置:网站首页 wedding ring是什么意思 Ouster激光雷达获取点云线数ring(通道)信息

Ouster激光雷达获取点云线数ring(通道)信息

2023-08-20 09:21| 来源: 网络整理| 查看: 265

文章目录 前言一、Ouster驱动程序定义的Point的数据类型二、如何接收带有`ring`信息的点云1. 定义自己的点类型2. 接收程序

前言

提示:这里可以添加本文要记录的大概内容:

本人在ROS环境下使用Ouster激光雷达获取的点云做检测算法,想要获取点云中的每个点所在的线数ring信息。首先通过查找资料,velodyne的激光雷达驱动程序可以直接获取线数ring信息,但是其他家的激光雷达驱动大部分都不可以。

本着爱钻研的习惯,研究了Ouster激光雷达的ROS驱动程序,发现其定义的点的数据类型中是包含ring信息的,但是在转化为ROS消息的过程中损失掉了。

想要不损失ring信息,必须接收点云定义的点的数据类型和驱动程序的定义的点的数据类型一样。

一、Ouster驱动程序定义的Point的数据类型

Ouster激光雷达的驱动程序安装过程,我就不展开说了,参考以下链接:

https://ouster.atlassian.net/wiki/spaces/SUPPORT/pages/928120883/Ouster+ROS

ROS驱动程序主要使用的功能包是ouster_ros 在这里插入图片描述 在ouster_ros->include->ouster_ros->point.h中定义的数据类型如下,其中uint8_t ring表示的是激光雷达点的线数信息。

namespace ouster_ros { struct EIGEN_ALIGN16 Point { PCL_ADD_POINT4D; float intensity; uint32_t t; uint16_t reflectivity; uint8_t ring; uint16_t ambient; uint32_t range; EIGEN_MAKE_ALIGNED_OPERATOR_NEW }; } // namespace ouster_ros 二、如何接收带有ring信息的点云

说明:由于经历了驱动程序将点云转化为ROS格式发布,我们要使用pcl::fromROSMsg()函数接收带有ring信息的点云,需要首先定义和驱动程序一样的点类型。如下图所示:

1. 定义自己的点类型 // (1) 定义自己的点类型 struct EIGEN_ALIGN16 MyPoint { PCL_ADD_POINT4D; float intensity; uint32_t t; uint16_t reflectivity; uint8_t ring; uint16_t ambient; uint32_t range; EIGEN_MAKE_ALIGNED_OPERATOR_NEW }; // (2)向PCL点云库注册自己的点类型 POINT_CLOUD_REGISTER_POINT_STRUCT(MyPoint, (float, x, x) (float, y, y) (float, z, z) (float, intensity, intensity) // use std::uint32_t to avoid conflicting with pcl::uint32_t (std::uint32_t, t, t) (std::uint16_t, reflectivity, reflectivity) (std::uint8_t, ring, ring) (std::uint16_t, ambient, ambient) (std::uint32_t, range, range) ) 2. 接收程序 /* 回调函数定义...略,假设回调函数入口参数是 (const sensor_msgs::PointCloud2ConstPtr &in_cloud_ptr) */ // 定义接收变量 pcl::PointCloud laserCloudIn; // 将ROS格式点云转化为PCL格式 pcl::fromROSMsg(*in_cloud_ptr, laserCloudIn); // 打印每个点的ring信息 for (size_t i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有